package org.jsola.hr.service;

import javax.validation.constraints.NotNull;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IEmpCertificateDAO;
import org.jsola.hr.dto.EmpCertificateAddDTO;
import org.jsola.hr.dto.EmpCertificateDTO;
import org.jsola.hr.dto.EmpCertificateUpdateDTO;
import org.jsola.hr.entity.EmpCertificateDO;
import org.jsola.hr.query.EmpCertificateQuery;
import org.jsola.hr.vo.EmpCertificateListVO;
import org.jsola.hr.vo.EmpCertificateVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * @author zhr
 */
public interface IEmpCertificateService extends IService<IEmpCertificateDAO, EmpCertificateDO> {

    /**
     * 新增员工证书
     * @param empCertificateAddDTO 新增员工证书DTO
     * @param tokenUser 当前用户
     * @return 员工证书详情信息
     */
    EmpCertificateVO save(EmpCertificateAddDTO empCertificateAddDTO, TokenUser tokenUser);

    /**
     * 修改员工证书
     * @param empCertificateUpdateDTO 修改员工证书DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(EmpCertificateUpdateDTO empCertificateUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除员工证书，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param empCertificateIds 员工证书id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...empCertificateIds);

    /**
     * 根据员工证书id查找
     * @param empCertificateId 员工证书id
     * @param siteId 所属站点id
     * @return 员工证书详情信息
     */
    EmpCertificateVO selectById(String empCertificateId, String siteId);

    /**
     * 查询员工证书
     * @param empCertificateQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工证书列表信息
     */
    List<EmpCertificateListVO> select(EmpCertificateQuery empCertificateQuery, String siteId);

    /**
    * 查询员工证书记录数
    * @param empCertificateQuery 查询条件
    * @param siteId 所属站点id
    * @return 员工证书记录数
    */
    int selectCount(EmpCertificateQuery empCertificateQuery, String siteId);

    /**
     * 分页查询员工证书
     * @param empCertificateQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工证书列表信息
     */
    Page<EmpCertificateListVO> selectPage(EmpCertificateQuery empCertificateQuery, String siteId);


    /**
     * 根据员工证书id查找
     * @param empCertificateId 员工证书id
     * @param siteId 所属站点id
     * @return 员工证书
     */
    EmpCertificateDO selectDOById(String empCertificateId, String siteId);

    /**
     * 查询员工证书
     * @param empCertificateQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工证书列表
     */
    List<EmpCertificateDO> selectDO(EmpCertificateQuery empCertificateQuery, String siteId);

    /**
     * 删除员工证书
     * @param tokenUser 当前用户
     * @param empCertificateId 员工证书id
     * @return 删除数量
     */
    Integer deleteEmpCertificate(TokenUser tokenUser, String empCertificateId);

    /**
     * 根据公司id删除部门
     *
     * @param companyId 公司id
     * @param tokenUser 当前用户
     */
    void deleteByCompanyId(@NotNull String companyId, TokenUser tokenUser);

    /**
     * 员工证书
     *
     * @param empCertificateList 员工证书
     * @param companyId          公司id
     * @param empId              人员id
     * @param tokenUser          当前用户
     */
    void publishEmpCertificateList(List<EmpCertificateDTO> empCertificateList, String companyId, String empId, TokenUser tokenUser);

    /**
     * 查找某员工的所有证书
     *
     * @param empId  员工id
     * @param siteId 站点
     * @return 员工的所有证书
     */
    List<EmpCertificateDO> listByEmpId(String empId, String siteId);
}


